//package com.charley.icloud.admin.security;
//
//import org.springframework.security.authentication.AuthenticationManager;
//import org.springframework.security.core.Authentication;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
//
//import javax.servlet.http.HttpServletRequest;
//
///**
// * Security相关操作
// * @author charley
// * @date 2024-04-25 11:17
// */
//public class SecurityUtils {
//
//	/**
//	 * 系统登录认证
//	 * @param request 请求头
//	 * @param username 用户名
//	 * @param password 密码
//	 * @param authenticationManager 验证管理器
//	 * @return token
//	 * 认证流程：
//	 *   1. 将用户名密码的认证信息封装到 JwtAuthenticationToken 对象
//	 *   2. 通过调用 authenticationManager.authenticate(token) 执行认证流程
//	 *   3. 通过 SecurityContextHolder 将认证信息保存到Security上下文
//	 *   4. 通过 JwtTokenUtils.generateToken(authentication) 生成token并返回
//	 */
//	public static JwtAuthenticationToken login(HttpServletRequest request, String username, String password, AuthenticationManager authenticationManager) {
//
//		JwtAuthenticationToken token = new JwtAuthenticationToken(username, password);
//
//		token.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
//
//		// 执行登录认证过程
//	    Authentication authentication = authenticationManager.authenticate(token);
//	    // 认证成功存储认证信息到上下文
//	    SecurityContextHolder.getContext().setAuthentication(authentication);
//		// 生成令牌并返回给客户端
//	    token.setToken(JwtTokenUtils.generateToken(authentication));
//		return token;
//	}
//
//	/**
//	 * 获取令牌进行认证
//	 */
//	public static void checkAuthentication(HttpServletRequest request) {
//		// 获取令牌并根据令牌获取登录认证信息
//		Authentication authentication = JwtTokenUtils.getAuthenticationeFromToken(request);
//		// 设置登录认证信息到上下文
//		SecurityContextHolder.getContext().setAuthentication(authentication);
//	}
//
//	/**
//	 * 获取当前用户名
//	 */
//	public static String getUsername() {
//		String username = null;
//		Authentication authentication = getAuthentication();
//		if(authentication != null) {
//			Object principal = authentication.getPrincipal();
//			if(principal instanceof UserDetails) {
//				username = ((UserDetails) principal).getUsername();
//			}
//		}
//		return username;
//	}
//
//	/**
//	 * 获取用户名
//	 * @return
//	 */
//	public static String getUsername(Authentication authentication) {
//		String username = null;
//		if(authentication != null) {
//			Object principal = authentication.getPrincipal();
//			if(principal instanceof UserDetails) {
//				username = ((UserDetails) principal).getUsername();
//			}
//		}
//		return username;
//	}
//
//	/**
//	 * 获取当前登录信息
//	 * @return authentication
//	 */
//	public static Authentication getAuthentication() {
//		if(SecurityContextHolder.getContext() == null) {
//			return null;
//		}
//		// 返回上下文中的authentication信息
//		return SecurityContextHolder.getContext().getAuthentication();
//	}
//
//}
